{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Example-2-GP-BS-Derivatives\n",
    "# Author: Matthew Dixon\n",
    "# Version: 1.0 (28.4.2020)\n",
    "# License: MIT\n",
    "# Email: matthew.dixon@iit.edu\n",
    "# Notes: tested on Mac OS X running Python 3.6.9 with the following packages:\n",
    "# scikit-learn=0.22.1, numpy=1.18.1, matplotlib=3.1.3\n",
    "# Citation: Please cite the following reference if this notebook is used for research purposes:\n",
    "# Dixon M.F. Halperin I. and P. Bilokon, Machine Learning in Finance: From Theory to Practice, Springer Graduate textbook Series, 2020. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Overview\n",
    "The purpose of this notebook is to demonstrate the derivation of the greeks in a Gaussian Process Regression model (GP), fitted to option price data. \n",
    "\n",
    "In this notebook, European option prices are generated from the Black-Scholes model.  The notebook begins by building a GP call model, where the input is the underlying price. The delta is then derived and compared with the Black-Scholes (BS)\n",
    "delta. The exercise is repeated, but using the volatility as the input instead of the underlying price. The vega of the GP is then derived and compared with the BS vega."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from BlackScholes import bsformula\n",
    "\n",
    "import numpy as np\n",
    "import scipy as sp\n",
    "\n",
    "from sklearn import gaussian_process\n",
    "from sklearn.gaussian_process.kernels import RBF\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Black-Scholes Model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First, set the model parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "KC = 130    # Call strike\n",
    "KP = 70     # Put strike\n",
    "r = 0.002   # risk-free rate\n",
    "sigma = 0.4 # implied volatility\n",
    "T = 2.0     # Time to maturity\n",
    "S0 = 100    # Underlying spot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "lb = 0   # lower bound on domain\n",
    "ub = 300 # upper bound on domain\n",
    "training_number = 100 # Number of training samples\n",
    "testing_number = 50   # Number of testing samples\n",
    "sigma_n = 1e-8 # additive noise in GP"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define the call and put prices using the BS model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "call = lambda x, y: bsformula(1, lb+(ub-lb)*x, KC, r, T, y, 0)[0]\n",
    "put = lambda x, y: bsformula(-1, lb+(ub-lb)*x, KP, r, T, y, 0)[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Delta"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Generate the training and testing data, where the input is the gridded underlying and the output are the option prices. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = np.array(np.linspace(0.01, 1.2, training_number), dtype='float32').reshape(training_number, 1)\n",
    "x_test = np.array(np.linspace(0.01, 1.0, testing_number), dtype='float32').reshape(testing_number, 1)\n",
    "\n",
    "y_train = []\n",
    "    \n",
    "for idx in range(len(x_train)):\n",
    "    y_train.append(call(x_train[idx], sigma))\n",
    "y_train = np.array(y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fit the GP model to the generated data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/dez/opt/miniconda3/envs/MLFenv/lib/python3.6/site-packages/sklearn/gaussian_process/_gpr.py:494: ConvergenceWarning: lbfgs failed to converge (status=2):\n",
      "ABNORMAL_TERMINATION_IN_LNSRCH.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "  _check_optimize_result(\"lbfgs\", opt_res)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GaussianProcessRegressor(alpha=1e-10, copy_X_train=True,\n",
       "                         kernel=RBF(length_scale=1), n_restarts_optimizer=20,\n",
       "                         normalize_y=False, optimizer='fmin_l_bfgs_b',\n",
       "                         random_state=None)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sk_kernel = RBF(length_scale=1.0, length_scale_bounds=(0.01, 10000.0))\n",
    "gp = gaussian_process.GaussianProcessRegressor(kernel=sk_kernel, n_restarts_optimizer=20)\n",
    "gp.fit(x_train, y_train)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get the model's predicted outputs for each of the test inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/dez/opt/miniconda3/envs/MLFenv/lib/python3.6/site-packages/sklearn/gaussian_process/_gpr.py:362: UserWarning: Predicted variances smaller than 0. Setting those variances to 0.\n",
      "  warnings.warn(\"Predicted variances smaller than 0. \"\n"
     ]
    }
   ],
   "source": [
    "y_pred, sigma_hat = gp.predict(x_test, return_std=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Derive the GP delta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "l = gp.kernel_.length_scale\n",
    "rbf = gaussian_process.kernels.RBF(length_scale=l)\n",
    " \n",
    "Kernel = rbf(x_train, x_train)\n",
    "K_y = Kernel + np.eye(training_number) * sigma_n\n",
    "L = sp.linalg.cho_factor(K_y)\n",
    "alpha_p = sp.linalg.cho_solve(np.transpose(L), y_train)\n",
    "    \n",
    "k_s = rbf(x_test, x_train)\n",
    "k_s_prime = (x_train.T - x_test) * k_s / l**2\n",
    "f_prime = np.dot(k_s_prime, alpha_p) / (ub - lb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the BS delta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 4.74355675e-04],\n",
       "       [-1.54547798e-04],\n",
       "       [-6.89400856e-05],\n",
       "       [ 5.43607492e-05],\n",
       "       [ 8.20773645e-06],\n",
       "       [-5.50061906e-05],\n",
       "       [-7.91276108e-05],\n",
       "       [-1.31983656e-05],\n",
       "       [ 2.71067172e-06],\n",
       "       [-1.59579803e-05],\n",
       "       [-4.82589673e-05],\n",
       "       [ 1.41682997e-05],\n",
       "       [-5.72497016e-05],\n",
       "       [-2.12980764e-05],\n",
       "       [-1.30554096e-05],\n",
       "       [-2.21766433e-05],\n",
       "       [-2.63791796e-05],\n",
       "       [-2.65925885e-05],\n",
       "       [-2.15315581e-05],\n",
       "       [-2.04919153e-05],\n",
       "       [-2.83747148e-05],\n",
       "       [-4.14618556e-05],\n",
       "       [-5.21330805e-05],\n",
       "       [-5.69529677e-05],\n",
       "       [-6.36763981e-05],\n",
       "       [-7.55644917e-05],\n",
       "       [-9.87666820e-05],\n",
       "       [-1.25403588e-04],\n",
       "       [-1.45083339e-04],\n",
       "       [-1.52642046e-04],\n",
       "       [-1.54737682e-04],\n",
       "       [-1.64429655e-04],\n",
       "       [-1.88838133e-04],\n",
       "       [-2.19590368e-04],\n",
       "       [-2.37650575e-04],\n",
       "       [-2.27685344e-04],\n",
       "       [-1.93084339e-04],\n",
       "       [-1.51110765e-04],\n",
       "       [-1.22497124e-04],\n",
       "       [-1.05702152e-04],\n",
       "       [-7.32711951e-05],\n",
       "       [ 9.63309859e-06],\n",
       "       [ 1.57081666e-04],\n",
       "       [ 3.47015149e-04],\n",
       "       [ 5.38879427e-04],\n",
       "       [ 7.11749766e-04],\n",
       "       [ 8.93028618e-04],\n",
       "       [ 1.14482086e-03],\n",
       "       [ 1.51123937e-03],\n",
       "       [ 1.96196461e-03]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "delta = lambda x, y: bsformula(1, lb+(ub-lb)*x, KC, r, T, y, 0)[1]\n",
    "delta(x_test, sigma) - f_prime"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Compare the GP delta with the BS delta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10,6),facecolor='white', edgecolor='black')\n",
    "plt.plot(lb+(ub-lb)*x_test, delta(x_test,sigma), color = 'black', label = 'Exact')\n",
    "plt.plot(lb+(ub-lb)*x_test, f_prime, color = 'red', label = 'GP')\n",
    "plt.grid(True)\n",
    "plt.xlabel('S')\n",
    "plt.ylabel('$\\Delta$')\n",
    "plt.legend(loc = 'best', prop={'size':10});"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Show the error between the GP delta and the BS delta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10,6),facecolor='white', edgecolor='black')\n",
    "plt.plot(lb+(ub-lb)*x_test, delta(x_test,sigma) - f_prime, color = 'black', label = 'GP Error')\n",
    "plt.grid(True)\n",
    "plt.xlabel('S')\n",
    "plt.ylabel('Error in $\\Delta$')\n",
    "plt.legend(loc = 'best', prop={'size':10});"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Vega"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Generate the training and testing data, where the input is the gridded underlying and the output are the option prices. The inputs are again scaled to the unit domain. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = np.array(np.linspace(0.01, 1.2, training_number), dtype='float32').reshape(training_number, 1)\n",
    "x_test = np.array(np.linspace(0.01, 1.0, testing_number), dtype='float32').reshape(testing_number, 1)\n",
    "\n",
    "y_train = []\n",
    "for idx in range(len(x_train)):\n",
    "    y_train.append(call((S0-lb)/(ub-lb), x_train[idx]))\n",
    "y_train = np.array(y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fit the GP model to the generated data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/dez/opt/miniconda3/envs/MLFenv/lib/python3.6/site-packages/sklearn/gaussian_process/_gpr.py:494: ConvergenceWarning: lbfgs failed to converge (status=2):\n",
      "ABNORMAL_TERMINATION_IN_LNSRCH.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "  _check_optimize_result(\"lbfgs\", opt_res)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GaussianProcessRegressor(alpha=1e-10, copy_X_train=True,\n",
       "                         kernel=RBF(length_scale=1), n_restarts_optimizer=20,\n",
       "                         normalize_y=False, optimizer='fmin_l_bfgs_b',\n",
       "                         random_state=None)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sk_kernel = RBF(length_scale=1.0, length_scale_bounds=(0.01, 10000.0))\n",
    "gp = gaussian_process.GaussianProcessRegressor(kernel=sk_kernel, n_restarts_optimizer=20)\n",
    "gp.fit(x_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get the model's predicted outputs for each of the test inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/dez/opt/miniconda3/envs/MLFenv/lib/python3.6/site-packages/sklearn/gaussian_process/_gpr.py:362: UserWarning: Predicted variances smaller than 0. Setting those variances to 0.\n",
      "  warnings.warn(\"Predicted variances smaller than 0. \"\n"
     ]
    }
   ],
   "source": [
    "y_pred, sigma_hat = gp.predict(x_test, return_std=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Derive the GP delta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "l = gp.kernel_.length_scale\n",
    "rbf = gaussian_process.kernels.RBF(length_scale=l)\n",
    " \n",
    "Kernel= rbf(x_train, x_train)\n",
    "K_y = Kernel + np.eye(training_number) * sigma_n\n",
    "L = sp.linalg.cho_factor(K_y)\n",
    "alpha_p = sp.linalg.cho_solve(np.transpose(L), y_train)\n",
    "    \n",
    "k_s = rbf(x_test, x_train)\n",
    "\n",
    "k_s_prime = np.zeros([len(x_test), len(x_train)])\n",
    "for i in range(len(x_test)):\n",
    "    for j in range(len(x_train)):\n",
    "        k_s_prime[i, j] = (1.0/l**2) * (x_train[j] - x_test[i]) * k_s[i, j]\n",
    "        \n",
    "f_prime = np.dot(k_s_prime, alpha_p)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the BS delta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 2.73323214e-02],\n",
       "       [-3.63722206e-02],\n",
       "       [ 1.64518629e-02],\n",
       "       [-1.19618828e-02],\n",
       "       [ 9.04885644e-02],\n",
       "       [-2.52595481e-02],\n",
       "       [ 5.11025790e-03],\n",
       "       [-1.00604586e-02],\n",
       "       [ 1.21355170e-02],\n",
       "       [ 7.57406063e-04],\n",
       "       [ 2.20789772e-02],\n",
       "       [-1.54410132e-02],\n",
       "       [ 9.73334611e-03],\n",
       "       [ 2.84900224e-02],\n",
       "       [ 2.19380482e-02],\n",
       "       [ 3.16619358e-02],\n",
       "       [ 1.50605033e-02],\n",
       "       [ 4.67068013e-03],\n",
       "       [ 1.34421845e-02],\n",
       "       [ 1.18260567e-02],\n",
       "       [-9.79617389e-04],\n",
       "       [ 2.62858555e-03],\n",
       "       [ 8.92265154e-03],\n",
       "       [ 3.26776342e-03],\n",
       "       [ 3.18739041e-03],\n",
       "       [ 8.18172250e-03],\n",
       "       [ 3.27610143e-03],\n",
       "       [ 1.30758726e-03],\n",
       "       [ 1.24759622e-03],\n",
       "       [-1.11962343e-03],\n",
       "       [-4.11880365e-03],\n",
       "       [-5.11618792e-03],\n",
       "       [-7.16678635e-03],\n",
       "       [-5.33907354e-03],\n",
       "       [-3.70838755e-03],\n",
       "       [-6.29176868e-03],\n",
       "       [ 2.83237543e-05],\n",
       "       [ 1.35560467e-03],\n",
       "       [-1.10171107e-03],\n",
       "       [ 1.52345561e-03],\n",
       "       [ 4.33087958e-03],\n",
       "       [-5.62672202e-03],\n",
       "       [ 6.56068115e-04],\n",
       "       [ 5.73927948e-03],\n",
       "       [-4.59821670e-03],\n",
       "       [-9.19407708e-03],\n",
       "       [-1.99972912e-02],\n",
       "       [-5.99889743e-02],\n",
       "       [-5.02803301e-02],\n",
       "       [-5.40550458e-02]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vega = lambda x, y: bsformula(1, lb + (ub-lb) * x, KC, r, T, y, 0)[2]\n",
    "vega((S0-lb)/(ub-lb), x_test) - f_prime"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Compare the GP vega with the BS vega\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10,6), facecolor='white', edgecolor='black')\n",
    "plt.plot(x_test, vega((S0-lb)/(ub-lb), x_test), color = 'black', label = 'Exact')\n",
    "plt.plot(x_test, f_prime, color = 'red', label = 'GP')\n",
    "plt.grid(True)\n",
    "plt.xlabel('$\\\\sigma$')\n",
    "plt.ylabel('$\\\\nu$')\n",
    "plt.legend(loc = 'best', prop={'size':10});"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot the error between the GP vega and the BS vega\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10,6), facecolor='white', edgecolor='black')\n",
    "plt.plot(x_test, vega((S0-lb)/(ub-lb), x_test)-f_prime, color = 'black', label = 'GP Error')\n",
    "plt.grid(True)\n",
    "plt.xlabel('$\\\\sigma$')\n",
    "plt.ylabel('Error in $\\\\nu$')\n",
    "plt.legend(loc = 'best', prop={'size':10});"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
